package com.dongjiantong.farmrecords.service;

import com.dongjiantong.common.web.sso.LoginInfo;
import com.dongjiantong.farmrecords.model.FarmRecordsProduction;
import com.dongjiantong.mybatis.BaseService;
import com.github.pagehelper.PageInfo;

import javax.xml.crypto.Data;
import java.util.Date;
import java.util.Map;

public interface FarmRecordsProductionService extends BaseService<FarmRecordsProduction> {

    /**
     * 根据条件进行分页查询 (无条件表示查询全部)
     * @param pageNum
     * @param pageSize
     * @param map   查询条件
     * @return  Response<PageInfo<FarmRecordsProduction>>
     */
    PageInfo<FarmRecordsProduction> selectByMap(Integer pageNum, Integer pageSize, Map map);

    /**
     * 新建一条记录
     * @param farmRecordsProduction
     * @param loginInfo
     * @param toStatus
     * @return
     */
    Map<String,Object> createOne(LoginInfo loginInfo,FarmRecordsProduction farmRecordsProduction, Integer toStatus,Integer isFrom);

    /**
     * 更新记录 (暂存 => 提交)
     * @param farmRecordsProduction
     * @param toStatus
     * @return
     */
    //Integer commitByObj(FarmRecordsProduction farmRecordsProduction, Integer toStatus);

    /**
     * 更新一条记录 (根据id或者number)
     * @param farmRecordsProduction
     * @param toStatus
     * @return  boolean (更新成功返回true 反之返回false)
     */
    Integer updateByIdOrNumber(FarmRecordsProduction farmRecordsProduction,Integer toStatus);

    /**
     * 根据主键id删除一条记录
     * @param id
     * @return
     */
    boolean deleteById(Long id);

    /**
     * 根据前缀寻找表中最大单据号
     * @param prefix
     * @return
     */
    String findCurrentMaxNumber(String prefix);

    /**
     * 根据单据类型和单据id更新delete_flag
     * @param paramMapOfUpdateProduction  参数
     */
    void updateDeleteFlagByReportIdAndReportType(Map<String, Object> paramMapOfUpdateProduction);
    /**
     * 存栏按数量变化统计
     * @param map
     * @return
     */
    Integer selectQuantityChange(Map map);

    /**
     * 养殖端按照单据状态分页查询列表
     * @param pageNum
     * @param pageSize
     * @param status
     * @return
     */
    PageInfo<FarmRecordsProduction> selectListByStatus(Integer pageNum, Integer pageSize, Integer status, Long farmId,Integer nonBull);

    /**
     * 根据养殖场id查询的存栏变动数
     * @param farmId
     * @param breedSecondType 二级畜种
     * @param breedThirdType 三级畜种
     */
    Integer selectQuantityChangeByFarmId(Long farmId,Integer breedSecondType,Integer breedThirdType);

    /**
     * 政府人员根据(二级)畜种查看其管辖区域内 生产单据的合计数
     * @param breedSecondType
     * @param userId
     * @return
     */
    Integer selectQuantityChangeByGovAndBreedType(Long userId,Integer breedSecondType);

    /**
     * 根据日期获取出生,卖出和死淘数
     * @param farmId
     * @return
     */
    Map<String,Object> selectQuantityByFarmId(Long farmId, Date startDate, Date endDate);
}
